function Bomb (battle) {
	// Misc
	var BOMB_W = 25;
	var BOMB_H = 25;
	var BOMB_SPEED = MAP_TILE_SIZE * 10 * 0.001;
	var BOMB_MAX_ROTATE_SPEED = 5;
	var EARTH_GRAVITY = 0.0018;
	
	
	// Direction enum
	var DIRECTION_DOWN = 0;
	var DIRECTION_LEFT = 1;
	var DIRECTION_UP = 2;
	var DIRECTION_RIGHT = 3;
	
	
	
	// Bomb properties
	this.m_x = 0;
	this.m_y = 0;
	this.m_h = 0;
	this.m_direction = 0;
	this.m_active = false;
	this.m_force = 0;
	this.m_damage = 0;
	this.m_radius = 0;
	
	this.m_angle = 0;
	this.m_rotateSpeed = 0;
	
	// Image
	var bombImage = g_graphicEngine.LoadImage("Data/ActionPhase/Penguin/MainBomb.png");
	
	
	this.Start = function (x, y, dir, force, damage, radius) {
		this.m_active = true;
		this.m_x = x;
		this.m_y = y;
		this.m_h = 0;
		this.m_direction = dir;
		this.m_force = force;
		this.m_damage = damage;
		this.m_radius = radius;
		
		this.m_rotateSpeed = (Math.random() - 0.5) * BOMB_MAX_ROTATE_SPEED;
	}
	
	this.Update = function () {
		if (this.m_active == true) {
			if (this.m_direction == DIRECTION_DOWN) {
				this.m_y += BOMB_SPEED * g_deltaTime;
			}
			else if (this.m_direction == DIRECTION_LEFT) {
				this.m_x -= BOMB_SPEED * g_deltaTime;
			}
			else if (this.m_direction == DIRECTION_UP) {
				this.m_y -= BOMB_SPEED * g_deltaTime;
			}
			else if (this.m_direction == DIRECTION_RIGHT) {
				this.m_x += BOMB_SPEED * g_deltaTime;
			}
			
			this.m_h += this.m_force * g_deltaTime;
			this.m_force -= EARTH_GRAVITY * g_deltaTime;
			
			if (this.m_h <= 0) {
				this.Explode();
			}
			
			this.m_angle += this.m_rotateSpeed * g_deltaTime;
			if (this.m_angle > 360) this.m_angle -= 360;
			if (this.m_angle < -720) this.m_angle += 360;
		}
	}
	
	this.Draw = function () {
		if (this.m_active == true) {
			g_graphicEngine.Draw (g_context, bombImage, 0, 0, BOMB_W, BOMB_H, this.m_x - ((BOMB_W * 0.5) >> 0) + BATTLE_OFFSET_X, this.m_y - this.m_h - ((BOMB_H * 0.5) >> 0) + BATTLE_OFFSET_Y, BOMB_W, BOMB_H, 1, 0, 0, this.m_angle);
		}
	}
	
	this.Stop = function () {
		this.m_active = false;
	}
	
	this.Explode = function () {
		this.m_active = false;
		
		var cx = (this.m_x / MAP_TILE_SIZE) >> 0; 
		if (cx >= MAP_SIZE_W) return;
		if (cx < 0) return;
		var cy = (this.m_y / MAP_TILE_SIZE) >> 0;
		if (cy >= MAP_SIZE_H) return;
		if (cy < 0) return;
		
		if (battle.pathMap[cx][cy] == 1) {
			battle.StartExplosion (0, this.m_x, this.m_y - MAP_TILE_SIZE * 0.5, this.m_damage * 0.5, this.m_radius);
		}
		else {
			battle.StartExplosion (1, this.m_x, this.m_y, this.m_damage, this.m_radius);
		}
	}
}